package org.jeecg.modules.music.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.api.vo.album.AlbumDetail;
import org.jeecg.modules.api.vo.album.AlbumVo;
import org.jeecg.modules.api.vo.songlist.SonglistDetailVo;
import org.jeecg.modules.api.vo.songlist.SonglistRelatedVo;
import org.jeecg.modules.api.vo.songlist.TagVo;
import org.jeecg.modules.music.entity.MusAlbumSong;
import org.jeecg.modules.music.entity.MusSong;
import org.jeecg.modules.music.entity.dto.HomeMusCountDto;
import org.jeecg.modules.music.entity.vo.HomeAlbumsVo;
import org.jeecg.modules.music.entity.vo.HomeBannerVo;
import org.jeecg.modules.music.entity.vo.HomeHotAlbumsVo;
import org.jeecg.modules.music.model.MusSongListCategoryModel;

import java.util.List;


public interface MusAlbumSongListMapper extends BaseMapper<MusAlbumSong> {

    List<MusSongListCategoryModel> getAlbumSongByOrgCode(IPage page, @Param("musCode") String musCode, @Param("albumParams") MusAlbumSong albumParams);

    Integer getAlbumSongByOrgCodeTotal(@Param("musCode") String musCode, @Param("albumParams") MusAlbumSong albumParams);

    IPage<MusAlbumSong> querySongListPage(Page<MusAlbumSong> page, @Param("musCode") String musCode, @Param("albumParams") MusAlbumSong albumParams);

    IPage<MusSong> querySongDetailPage(Page<MusSong> page, @Param("songlistId") String songlistId,@Param("songParams") MusSong songParams);


    IPage<MusSong> queryNoSongDetailPage(Page<MusSong> page, String songlistId, MusSong songParams);

    List<HomeBannerVo> queryBanner(@Param("type") Integer type);

    List<HomeAlbumsVo> queryHomeHotAlbums(@Param("type") Integer type,@Param("limit") Integer limit,@Param("area")String area);

    List<HomeHotAlbumsVo> queryHomeAlbumsAll();

    AlbumVo queryAlbumVoDetail(@Param("albumId") String albumId);

    AlbumDetail getAlbumAPIDetail(@Param("albumId")String id);

    List<AlbumDetail> querySingerAlbums(@Param("albumId") String albumId, @Param("artistId") String artistId, @Param("limit") Integer limit,@Param("offset") Integer offset);

    SonglistDetailVo reqPlayListDetail(@Param("id") String id);

    List<TagVo> queryAlbumTags(@Param("ids") String[] ids);

    List<SonglistRelatedVo> querySonglistRelated(@Param("id") String id);

    List<SonglistDetailVo> queryCatPlayList(@Param("cat") String cat, @Param("limit") Integer limit, @Param("offset") Integer offset);

    Integer countAlbums();

    Integer countSonglist();

    List<AlbumDetail> queryAlbums(@Param("area") String area,@Param("offset") Integer offset,@Param("limit") Integer limit);

    List<AlbumDetail> searchSuggestAlbums(@Param("keywords") String keywords);

    List<AlbumDetail> searchAlbums(@Param("keywords") String keywords, @Param("limit") Integer limit, @Param("offset") Integer offset);

    List<SonglistDetailVo> searchPlaylists(@Param("keywords") String keywords, @Param("limit") Integer limit, @Param("offset") Integer offset);

    List<SonglistDetailVo> getUserSonglist(@Param("uid") String uid);

    List<AlbumDetail> queryAlbumsByUser(@Param("uid") String uid);

    List<SonglistDetailVo> getUserMake(@Param("uid") String uid);

    SonglistDetailVo queryPlayListUser(@Param("uid") String id);

    List<HomeMusCountDto> queryGroupRecommend();

    List<HomeMusCountDto> queryGroupArea();

    List<HomeMusCountDto> queryGroupRecommendAlbums();

    List<HomeMusCountDto> queryGroupAreaAlbums();
}
